package pe.com.bbva.mantenimiento.action;

import java.util.List;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import pe.com.bbva.mantenimiento.bo.ProveedorBO;
import pe.com.bbva.mantenimiento.domain.Proveedor;
import pe.com.bbva.util.Constantes;
import pe.com.bbva.util.SelectItem;
import pe.com.stefanini.core.action.GenericAction;
import pe.com.stefanini.core.domain.UsuarioSession;
import pe.com.stefanini.core.exceptions.BOException;
import pe.com.stefanini.core.service.ServiceUtil;
import pe.com.stefanini.core.util.StringUtil;

@Service("proveedorAction")
@Scope("prototype")
@Results({
	@Result(name="viewListProveedor",type="tiles", location="viewListProveedor"),
	@Result(name="viewFormProveedor",type="tiles", location="viewFormProveedor"),
	@Result(name="listaProveedores",type="json",params={"root","grid"})
})
public class ProveedorAction extends GenericAction {

	private static final long serialVersionUID = -3628759607231631950L;

	private Logger logger = Logger.getLogger(this.getClass());

	@Resource
	private ProveedorBO proveedorBO;

	private Long idProveedor;
	private String codigoAntiguo;
	private String codigoGPSAntiguo;
	private String nomArchivoAntiguo;
	private Proveedor proveedor;
	private Proveedor proveedorBuscar;
	private List<Proveedor> listaProveedores;
	private List<SelectItem> itemTipoProveedor;
	private List<SelectItem> itemTipoProveedorEdicion;

	public void cleanForm() {
		setIdProveedor(null);
		setCodigoAntiguo("");
		setProveedor(null);
		setProveedorBuscar(null);
	}
	
	@Action(value="initProveedor")
	public String init() {
		proveedor = new Proveedor();
		return "viewListProveedor";
	}
	
	@Action(value="findAllProveedor")
	public String findAll() {
		try {
			if (proveedorBuscar == null) {
				proveedorBuscar = new Proveedor();
			}
			setGrid(proveedorBO.findToGrid(proveedorBuscar,getSidx()+" "+getSord(),getPage(),getRows()));
			if(getGrid().getRecords().equals(new Integer(0))){
				addActionError("No se encontraron resultados");
			}
		} catch (BOException e) {
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return "listaProveedores";
	}

	@Action(value="newProveedor")
	public String newForm() {
		return "viewFormProveedor";
	}
	
	@Action(value="updateProveedor")
	public String updateForm() {
		try {
			proveedor = proveedorBO.findById(idProveedor);
			codigoAntiguo = proveedor.getCodigoProveedor();
			if(proveedor.getTipo().getId().equals(Constantes.PROVEEDOR_TIPO_ESTAMPADO) && proveedor.getCodigoGPS()!=null){
				codigoGPSAntiguo = proveedor.getCodigoGPS();
			}
			if(proveedor.getTipo().getId().equals(Constantes.PROVEEDOR_TIPO_COURIER) && proveedor.getNombreArchivo()!=null){
				nomArchivoAntiguo =  proveedor.getNombreArchivo();
			}
		} catch (BOException e) {
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return "viewFormProveedor";
	}

	@Action(value="deleteProveedor")
	public String delete() {
		try {
			proveedorBO.deleteLog(Proveedor.class, idProveedor);
			addActionMessage("Eliminado Correctamente.");
		} catch (BOException e) {
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		}
		return "viewListProveedor";
	}

	@Action(value="saveProveedor")
	public String save() {
		String forward = "";
		String mensaje = "";
		if (idProveedor == null) {
			mensaje = "Registrado Correctamente";
		} else {
			mensaje = "Actualizado Correctamente";
		}
		try {
			UsuarioSession usuarioSession = (UsuarioSession) getObjectSession(Constantes.USUARIO_SESSION);
			setCamposAuditoria(proveedor, usuarioSession);
			proveedorBO.save(proveedor, codigoAntiguo, codigoGPSAntiguo, nomArchivoAntiguo);
			listaProveedores = proveedorBO.findProveedores(new Proveedor());
			addActionMessage(mensaje);
			cleanForm();
			forward = "viewListProveedor";
		} catch (BOException e) {
			forward = "viewFormProveedor";
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return forward;
	}

	public Long getIdProveedor() {
		return idProveedor;
	}

	public void setIdProveedor(Long idProveedor) {
		this.idProveedor = idProveedor;
	}

	public String getCodigoAntiguo() {
		return codigoAntiguo;
	}

	public void setCodigoAntiguo(String codigoAntiguo) {
		this.codigoAntiguo = codigoAntiguo;
	}

	public Proveedor getProveedor() {
		return proveedor;
	}

	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}

	public Proveedor getProveedorBuscar() {
		return proveedorBuscar;
	}

	public void setProveedorBuscar(Proveedor proveedorBuscar) {
		this.proveedorBuscar = proveedorBuscar;
	}

	public List<Proveedor> getListaProveedores() {
		return listaProveedores;
	}

	public void setListaProveedores(List<Proveedor> listaProveedores) {
		this.listaProveedores = listaProveedores;
	}

	@SuppressWarnings("static-access")
	public List<SelectItem> getItemTipoProveedor() {
		itemTipoProveedor = ((ServiceUtil) getObjectSession("serviceUtil")).getTipos(Constantes.ID_TABLA_TIPO_PROVEEDOR,Constantes.VAL_DEFAULT_SELECTION_TODOS);
		return itemTipoProveedor;
	}

	public void setItemTipoProveedor(List<SelectItem> itemTipoProveedor) {
		this.itemTipoProveedor = itemTipoProveedor;
	}

	@SuppressWarnings("static-access")
	public List<SelectItem> getItemTipoProveedorEdicion() {
		itemTipoProveedorEdicion = ((ServiceUtil) getObjectSession("serviceUtil")).getTipos(Constantes.ID_TABLA_TIPO_PROVEEDOR,Constantes.VAL_DEFAULT_SELECTION);
		return itemTipoProveedorEdicion;
	}

	public void setItemTipoProveedorEdicion(List<SelectItem> itemTipoProveedorEdicion) {
		this.itemTipoProveedorEdicion = itemTipoProveedorEdicion;
	}

	public void setCodigoGPSAntiguo(String codigoGPSAntiguo) {
		this.codigoGPSAntiguo = codigoGPSAntiguo;
	}

	public String getCodigoGPSAntiguo() {
		return codigoGPSAntiguo;
	}

	public String getNomArchivoAntiguo() {
		return nomArchivoAntiguo;
	}

	public void setNomArchivoAntiguo(String nomArchivoAntiguo) {
		this.nomArchivoAntiguo = nomArchivoAntiguo;
	}
}